package panels;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;

import panels.AboutWindow;

import com.jgoodies.forms.factories.DefaultComponentFactory;

import dane.Logowanie;
import dane.Towar;
import dane.Zapytania;

/**
 * Program <code>Music Store</code>
 * Klasa <code>Main</code> tworząca okno aplikacji z zdarzeniami 
 * @version 1.0 2013
 * @author Dorota Chyła, Tomasz Bednarski, Wojciech Florkowski, Łukasz Gąsiewicz
 */
public class Main extends JFrame implements ActionListener {

	/**
	 * @param args
	 */
	private JPanel jpMain;
	private JFrame frame;

	private Logowanie log;
	private Zapytania zap;
	private Towar towar;
	private Sklep sklep;
	private Zamowienia zamow;
	private AboutWindow ab;
	private Konczace kon;

	String[] optionJOptionPane = { "Tak", "Nie" };

	// ///LOGOWANIE
	private JTextField jtfEmail, jtfHaslo;
	private JLabel jlEmail, jlHaslo, lGraf;
	private JButton jbLog, jbRej;
	private JPanel jpLog;

	// PANEL KLIENTA
	private JPanel jpKlient;
	private JLabel jlRysPo;

	// MENU
	private JMenuBar menuBar;
	private JMenu menuSklep, menuZarza, menuAbout;
	private JMenuItem sklepListaPlyt, sklepZaloguj, sklepWyloguj, sklepWyjdz,
			zarzDodajProd, zarzKonczaceSie,
			zarzZamowienia, zarzStatystyki, oAplkikacji;
	String[] labelMenu = { "Sklep", "Zakupy", "Zarządzanie", "Pomoc" };
	String[] labelMenuSklep = { "Lista płyt", "Zaloguj", "Wyloguj", "Wyjdź" };
	String[] labelMenuZarza = { "Dodaj produkt", "Sprawdz wykupione albumy", "Zobacz zamówienia",
			"Zobacz statystyki" };
	String[] labelMenuAbout = { "Informacje o programie" };

	// LISTA PŁYT
	private JList list;
	private JLabel  jlNazwaW,
			jlRokW, jlGatunekW, jlIloscW, jlCenaW;
	private JButton jbSzukaj;
	private JComboBox comboBox;
	private JTextField jtSzukaj;
	private String[] labelComboBox = { "Po czym?", "Muzyku", "Nazwie albumu",
			"Roku wydania", "Nazwie utworu" };

	// DODAJ PRODUKT
	private JTextField[] imie = new JTextField[4];
	private JTextField[] nazwisko = new JTextField[4];
	private JTextField[] pseudonim = new JTextField[4];
	private JTextField[] nazwa = new JTextField[30];
	private JTextField[] czas = new JTextField[30];
	private JLabel[] nr = new JLabel[30];
	private JTextField jtfZespol;
	private JTextField jtfTytul;
	private JTextField jtfGatunek;
	private JTextField jtfRok;
	private JTextField jtfCena;
	private JTextField jtfIlosc;
	private JPanel jpDodajProdukt;
	private JButton jbDodajP;

	// KONCZACE
	private JTextField jtfKonczace;
	private JPanel jpKonczace;
	private JButton jbKonPokaz;

	// STATYSTYKI
	private JPanel jpGlowny, jpTydzien, jpMiesiac, jpRok;
	private JTabbedPane tabbed;
	private JButton jbWyjscieS;
	private JTextArea jtaTydzien, jtaMiesiac, jtaRok;

	/**
	 * Konstruktor bezparametrowy
	 */
	public Main() {
		setSize(800, 600);
		setTitle("Logowanie");
		// definicja zdarzenia zamkniecia okna
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				closeWindow();
			}
		});

		jpMain = new JPanel();
		jpMain.setLayout(null);
		jpMain.setBounds(0, 0, 800, 600);

		Dimension frameSize = getSize();
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		if (frameSize.height > screenSize.height)
			frameSize.height = screenSize.height;
		if (frameSize.width > screenSize.width)
			frameSize.width = screenSize.width;

		setLocation((screenSize.width - frameSize.width) / 2,
				(screenSize.height - frameSize.height) / 2);

		try {
			javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
				public void run() {
					createMenu();
				}
			});
		} catch (Exception e) {
			System.out.println("ERROR - Blad podczas tworzenia GUI aplikacji");
		}

		log = Logowanie.pobierzLogowanie();
		zap = new Zapytania();

		jpMain.add(logowanie());
		add(jpMain);
	}

	/**
	 * Metoda prywatna tworząca panel logowania się do aplikacji
	 * @return JPanel
	 */
	private JPanel logowanie() {
		jpLog = new JPanel();
		setTitle("Logowanie");
		jpLog.setBounds(0, 0, 800, 600);
		jpLog.setBackground(Color.BLACK);
		jpLog.setLayout(null);
		setPerson("Logowanie");

		int y = 340;
		int x = 0;

		jlEmail = new JLabel("E-mail:");
		jlEmail.setBounds(250 + x, 10 + y, 300, 24);
		jlEmail.setForeground(Color.WHITE);
		jlHaslo = new JLabel("Hasło:");
		jlHaslo.setBounds(250 + x, 70 + y, 300, 24);
		jlHaslo.setForeground(Color.WHITE);

		jtfEmail = new JTextField();
		jtfEmail.setBounds(250 + x, 30 + y, 300, 24);
		jtfHaslo = new JPasswordField("");
		;
		jtfHaslo.setBounds(250 + x, 90 + y, 300, 24);

		jbLog = new JButton("Zaloguj");
		jbLog.setBounds(325 + x, 140 + y, 150, 24);
		jbLog.addActionListener(this);
		jbLog.setBackground(new Color(140, 170, 204));
		jbLog.setForeground(Color.BLACK);
		jbRej = new JButton("Rejestracja");
		jbRej.setBounds(405 + x, 140 + y, 145, 20);
		jbRej.addActionListener(this);
		jbRej.setBackground(new Color(140, 170, 204));

		lGraf = new JLabel();
		try {
			lGraf.setIcon(new ImageIcon(Main.class
					.getResource("/img/logowanie.png")));
			lGraf.setBackground(Color.WHITE);
		} catch (Exception e) {
			System.out.println("Błąd wczytania obrazu");
		}
		lGraf.setBounds(0, 0, 785, 380);

		jpLog.add(jlEmail);
		jpLog.add(jlHaslo);
		jpLog.add(jtfEmail);
		jpLog.add(jtfHaslo);
		jpLog.add(lGraf);
		jpLog.add(jbLog);
		//jpLog.add(jbRej);

		return jpLog;
	}

	/**
	 * Metoda prywatna tworząca panel powitania
	 * @return JPanel
	 */
	private JPanel powitanie() {
		jpKlient = new JPanel();
		jpKlient.setBounds(0, 0, 800, 600);
		jpKlient.setBackground(Color.WHITE);
		jpKlient.setLayout(null);

		jlRysPo = new JLabel();
		try {
			jlRysPo.setIcon(new ImageIcon(Main.class
					.getResource("/img/powitanie.png")));
			jlRysPo.setBackground(Color.WHITE);
		} catch (Exception e) {
			System.out.println("Błąd wczytania obrazu");
		}
		jlRysPo.setBounds(0, 0, 800, 600);

		jpKlient.add(jlRysPo);
		return jpKlient;
	}

	/**
	 * Metoda prywatna tworząca panel dodawania nowej płyty do bazy
	 * @return
	 */
	private JPanel dodajProdukt() {
		this.setTitle(log.getTyp() + ": " + log.getImie() + " "
				+ log.getNazwisko() + ": Dodaj produkt");
		jpDodajProdukt = new JPanel();
		jpDodajProdukt.setLayout(null);
		jpDodajProdukt.setSize(800, 600);
		jpDodajProdukt.setBackground(Color.WHITE);

		JLabel lblTwrcy = DefaultComponentFactory.getInstance().createTitle(
				"Twórcy:");
		lblTwrcy.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblTwrcy.setForeground(Color.DARK_GRAY);
		lblTwrcy.setHorizontalAlignment(SwingConstants.LEFT);
		lblTwrcy.setBounds(10, 11, 88, 14);
		jpDodajProdukt.add(lblTwrcy);

		JLabel lblZesp = new JLabel("Zespół:");
		lblZesp.setBounds(10, 36, 46, 14);
		jpDodajProdukt.add(lblZesp);

		jtfZespol = new JTextField();
		jtfZespol.setBounds(61, 33, 86, 20);
		jpDodajProdukt.add(jtfZespol);
		jtfZespol.setColumns(10);

		JLabel lblMuzycy = new JLabel("Muzycy:");
		lblMuzycy.setBounds(10, 70, 46, 14);
		jpDodajProdukt.add(lblMuzycy);

		JLabel jlImie = new JLabel("Imie:");
		jlImie.setHorizontalAlignment(SwingConstants.CENTER);
		jlImie.setBounds(81, 70, 46, 14);
		jpDodajProdukt.add(jlImie);

		JLabel jlNazwisko = new JLabel("Nazwisko");
		jlNazwisko.setHorizontalAlignment(SwingConstants.CENTER);
		jlNazwisko.setBounds(177, 70, 46, 14);
		jpDodajProdukt.add(jlNazwisko);

		JLabel jlPseudo = new JLabel("Pseudonim:");
		jlPseudo.setHorizontalAlignment(SwingConstants.CENTER);
		jlPseudo.setBounds(266, 70, 60, 14);
		jpDodajProdukt.add(jlPseudo);

		int y = 90;
		for (int i = 0; i < 4; i++) {
			imie[i] = new JTextField();
			imie[i].setColumns(10);
			imie[i].setBounds(61, y, 86, 20);
			jpDodajProdukt.add(imie[i]);

			nazwisko[i] = new JTextField();
			nazwisko[i].setColumns(10);
			nazwisko[i].setBounds(157, y, 86, 20);
			jpDodajProdukt.add(nazwisko[i]);

			pseudonim[i] = new JTextField();
			pseudonim[i].setColumns(10);
			pseudonim[i].setBounds(253, y, 86, 20);
			jpDodajProdukt.add(pseudonim[i]);

			y += 25;
		}

		int y2 = 260, yJL = 263;
		int x = 40;
		for (int j = 0; j < 30; j += 10) {
			for (int i = j; i < (j + 10); i++) {
				nazwa[i] = new JTextField();
				nazwa[i].setColumns(10);
				nazwa[i].setBounds(x + 30, y2, 86, 20);
				jpDodajProdukt.add(nazwa[i]);

				czas[i] = new JTextField();
				czas[i].setColumns(10);
				czas[i].setBounds(x + 127, y2, 86, 20);
				jpDodajProdukt.add(czas[i]);

				nr[i] = new JLabel("" + (i + 1));
				nr[i].setBounds(x, yJL, 20, 14);
				jpDodajProdukt.add(nr[i]);

				y2 += 22;
				yJL += 22;
			}
			x += 250;
			y2 = 260;
			yJL = 263;
		}

		JLabel jlAlbum = DefaultComponentFactory.getInstance().createTitle(
				"Album:");
		jlAlbum.setForeground(Color.DARK_GRAY);
		jlAlbum.setFont(new Font("Tahoma", Font.PLAIN, 12));
		jlAlbum.setBounds(363, 12, 88, 14);
		jpDodajProdukt.add(jlAlbum);

		JLabel lblTytu = new JLabel("Tytuł:");
		lblTytu.setHorizontalAlignment(SwingConstants.RIGHT);
		lblTytu.setBounds(427, 36, 46, 14);
		jpDodajProdukt.add(lblTytu);

		jtfTytul = new JTextField();
		jtfTytul.setColumns(10);
		jtfTytul.setBounds(483, 36, 200, 20);
		jpDodajProdukt.add(jtfTytul);

		JLabel jlGatunek = new JLabel("Gatunek:");
		jlGatunek.setHorizontalAlignment(SwingConstants.RIGHT);
		jlGatunek.setBounds(373, 64, 100, 14);
		jpDodajProdukt.add(jlGatunek);

		jtfGatunek = new JTextField();
		jtfGatunek.setColumns(10);
		jtfGatunek.setBounds(483, 64, 200, 20);
		jpDodajProdukt.add(jtfGatunek);

		JLabel jlRok = new JLabel("Rok wydania:");
		jlRok.setHorizontalAlignment(SwingConstants.RIGHT);
		jlRok.setBounds(373, 96, 100, 14);
		jpDodajProdukt.add(jlRok);

		jtfRok = new JTextField();
		jtfRok.setColumns(10);
		jtfRok.setBounds(483, 96, 200, 20);
		jpDodajProdukt.add(jtfRok);

		jtfCena = new JTextField();
		jtfCena.setColumns(10);
		jtfCena.setBounds(483, 127, 200, 20);
		jpDodajProdukt.add(jtfCena);

		JLabel jlCena = new JLabel("Cena:");
		jlCena.setHorizontalAlignment(SwingConstants.RIGHT);
		jlCena.setBounds(373, 127, 100, 14);
		jpDodajProdukt.add(jlCena);

		jtfIlosc = new JTextField();
		jtfIlosc.setColumns(10);
		jtfIlosc.setBounds(483, 158, 200, 20);
		jpDodajProdukt.add(jtfIlosc);

		JLabel jlIlosc = new JLabel("Ilość:");
		jlIlosc.setHorizontalAlignment(SwingConstants.RIGHT);
		jlIlosc.setBounds(373, 158, 100, 14);
		jpDodajProdukt.add(jlIlosc);

		JSeparator separator_1 = new JSeparator();
		separator_1.setOrientation(SwingConstants.VERTICAL);
		separator_1.setBounds(352, 11, 438, 189);
		jpDodajProdukt.add(separator_1);

		JLabel jlUtwory = DefaultComponentFactory.getInstance().createTitle(
				"Utwory:");
		jlUtwory.setHorizontalAlignment(SwingConstants.CENTER);
		jlUtwory.setForeground(Color.DARK_GRAY);
		jlUtwory.setFont(new Font("Tahoma", Font.PLAIN, 12));
		jlUtwory.setBounds(10, 216, 88, 14);
		jpDodajProdukt.add(jlUtwory);

		JLabel jlTytul = new JLabel("Tytuł:");
		jlTytul.setBounds(71, 241, 46, 14);
		jpDodajProdukt.add(jlTytul);

		JLabel jlCzas = new JLabel("Czas:");
		jlCzas.setBounds(167, 241, 46, 14);
		jpDodajProdukt.add(jlCzas);

		JLabel jlTytul2 = new JLabel("Tytuł:");
		jlTytul2.setBounds(322, 241, 46, 14);
		jpDodajProdukt.add(jlTytul2);

		JLabel jlCzas2 = new JLabel("Czas:");
		jlCzas2.setBounds(418, 241, 46, 14);
		jpDodajProdukt.add(jlCzas2);

		JLabel jlTytul3 = new JLabel("Tytuł:");
		jlTytul3.setBounds(573, 241, 46, 14);
		jpDodajProdukt.add(jlTytul3);

		JLabel jlCzas3 = new JLabel("Czas:");
		jlCzas3.setBounds(669, 241, 46, 14);
		jpDodajProdukt.add(jlCzas3);

		JSeparator separator = new JSeparator();
		separator.setBounds(10, 211, 760, 378);
		jpDodajProdukt.add(separator);

		jbDodajP = new JButton("Dodaj");
		jbDodajP.setBounds(655, 500, 89, 23);
		jbDodajP.addActionListener(this);
		jpDodajProdukt.add(jbDodajP);

		return jpDodajProdukt;
	}

	/**
	 * Metoda prywatna tworząca panel z możliwością sprawdzenia które towary się kończą
	 * @return JPanel
	 */
	private JPanel konczace() {
		this.setTitle(log.getTyp() + ": " + log.getImie() + " "
				+ log.getNazwisko() + ": Zobacz kończące się płyty");
		jpKonczace = new JPanel();
		jpKonczace.setLayout(null);
		jpKonczace.setSize(800, 600);

		JLabel jlKonce = new JLabel(
				"Pokaż albumy, których na magazynie jest mniej niż:");
		jlKonce.setBounds(10, 10, 300, 14);
		jpKonczace.add(jlKonce);

		jtfKonczace = new JTextField();
		jtfKonczace.setBounds(320, 10, 45, 20);
		jpKonczace.add(jtfKonczace);

		jbKonPokaz = new JButton("Pokaż");
		jbKonPokaz.setBounds(10, 34, 100, 20);
		jbKonPokaz.addActionListener(this);
		jpKonczace.add(jbKonPokaz);

		return jpKonczace;
	}

	/**
	 * Metoda prywatna tworząca statystyki sprzedarzy
	 * @return JPanel
	 */
	private JPanel statystyki() {
		jpGlowny = new JPanel();
		jpGlowny.setLayout(null);
		jpGlowny.setBounds(0, 0, 800, 600);

		jpTydzien = new JPanel();
		jpTydzien.setName("Tydzień");
		jpTydzien.setLayout(null);
		jtaTydzien = new JTextArea();
		Towar[] tTydzien = zap
				.getAllTowarToStatic(" WHERE z.data_zlozenia > DATE_SUB(NOW(),INTERVAL 7 DAY) ");
		jtaTydzien.setText("");
		for (int i = 0; i < tTydzien.length; i++) {
			int ilosc = zap
					.getID("SELECT SUM(ilosc) FROM zamowiony_towar zt JOIN zamowienia z ON zt.id_zamowienia=z.id_zamowienia WHERE id_towaru = "
							+ tTydzien[i].getId()
							+ " AND z.data_zlozenia > DATE_SUB(NOW(),INTERVAL 7 DAY) ;",
							"SUM(ilosc)");
			jtaTydzien.append(tTydzien[i].getNazwaAlbumu() + " x " + ilosc
					+ "\n");
		}

		JScrollPane sp1 = new JScrollPane(jtaTydzien);
		sp1.setBounds(5, 5, 700, 470);
		jpTydzien.add(sp1);

		jpMiesiac = new JPanel();
		jpMiesiac.setName("Miesiąc");
		jpMiesiac.setLayout(null);
		jtaMiesiac = new JTextArea();
		Towar[] tMiesiac = zap
				.getAllTowarToStatic(" WHERE z.data_zlozenia > DATE_SUB(NOW(),INTERVAL 1 MONTH) ");
		jtaMiesiac.setText("");
		for (int i = 0; i < tMiesiac.length; i++) {
			int ilosc = zap
					.getID("SELECT SUM(ilosc) FROM zamowiony_towar zt JOIN zamowienia z ON zt.id_zamowienia=z.id_zamowienia WHERE id_towaru = "
							+ tMiesiac[i].getId()
							+ " AND z.data_zlozenia > DATE_SUB(NOW(),INTERVAL 1 MONTH) ;",
							"SUM(ilosc)");
			jtaMiesiac.append(tMiesiac[i].getNazwaAlbumu() + " x " + ilosc
					+ "\n");
		}

		JScrollPane sp2 = new JScrollPane(jtaMiesiac);
		sp2.setBounds(5, 5, 700, 470);
		jpMiesiac.add(sp2);

		jpRok = new JPanel();
		jpRok.setName("Rok");
		jpRok.setLayout(null);
		jtaRok = new JTextArea();
		Towar[] tRok = zap
				.getAllTowarToStatic(" WHERE z.data_zlozenia > DATE_SUB(NOW(),INTERVAL 1 YEAR) ");
		jtaRok.setText("");
		for (int i = 0; i < tRok.length; i++) {
			int ilosc = zap
					.getID("SELECT SUM(ilosc) FROM zamowiony_towar zt JOIN zamowienia z ON zt.id_zamowienia=z.id_zamowienia WHERE id_towaru = "
							+ tRok[i].getId()
							+ " AND z.data_zlozenia > DATE_SUB(NOW(),INTERVAL 1 YEAR) ;",
							"SUM(ilosc)");
			jtaRok.append(tRok[i].getNazwaAlbumu() + " x " + ilosc + "\n");
		}

		JScrollPane sp3 = new JScrollPane(jtaRok);
		sp3.setBounds(5, 5, 700, 470);
		jpRok.add(sp3);

		tabbed = new JTabbedPane();
		tabbed.setBounds(5, 5, 720, 520);
		tabbed.add(jpTydzien);
		tabbed.add(jpMiesiac);
		tabbed.add(jpRok);
		jpGlowny.add(tabbed);

		return jpGlowny;
	}

	/**
	 * Metoda prywatna tworząca menu aplikacji
	 */
	private void createMenu() {
		menuBar = new JMenuBar();
		menuBar.setBackground(Color.WHITE);

		menuSklep = createJMenu(labelMenu[0], KeyEvent.VK_S, true);
		menuZarza = createJMenu(labelMenu[2], KeyEvent.VK_D, true);
		menuAbout = createJMenu(labelMenu[3], KeyEvent.VK_P, true);

		sklepListaPlyt = createJMenuItem(labelMenuSklep[0], true);
		sklepZaloguj = createJMenuItem(labelMenuSklep[1], true);
		sklepWyloguj = createJMenuItem(labelMenuSklep[2], true);
		sklepWyjdz = createJMenuItem(labelMenuSklep[3], true);
		menuSklep.add(sklepListaPlyt);
		menuSklep.addSeparator();
		menuSklep.add(sklepZaloguj);
		menuSklep.add(sklepWyloguj);
		menuSklep.add(sklepWyjdz);

		zarzDodajProd = createJMenuItem(labelMenuZarza[0], true);
		zarzKonczaceSie = createJMenuItem(labelMenuZarza[1], true);
		zarzZamowienia = createJMenuItem(labelMenuZarza[2], true);
		zarzStatystyki = createJMenuItem(labelMenuZarza[3], true);
		menuZarza.add(zarzDodajProd);
		menuZarza.add(zarzKonczaceSie);
		menuZarza.add(zarzZamowienia);
		menuZarza.add(zarzStatystyki);

		oAplkikacji = createJMenuItem(labelMenuAbout[0], true);
		menuAbout.add(oAplkikacji);

		menuBar.add(menuSklep);
		menuBar.add(menuZarza);
		menuBar.add(menuAbout);

		this.setJMenuBar(menuBar);
	}

	/**
	 * Metoda prywatna tworząca elementy menu aplikacji
	 * @param name nazwa elementu menu
	 * @param keyEvent skrót klawiszowy
	 * @param enable dostępność 
	 * @return JMenu
	 */
	private JMenu createJMenu(String name, int keyEvent, boolean enable) {
		JMenu jMenu = new JMenu(name);
		jMenu.setMnemonic(keyEvent);
		jMenu.setEnabled(enable);
		return jMenu;
	}

	/**
	 * Metoda prywatna tworząca elementy rozwijanego menu
	 * @param name nazwa elementu
	 * @param enable dostępność
	 * @return JMenuItem
	 */
	private JMenuItem createJMenuItem(String name, boolean enable) {
		JMenuItem jMI;
		jMI = new JMenuItem(name);
		jMI.addActionListener(this);
		jMI.setEnabled(enable);
		return jMI;
	}

	/**
	 * Metoda prywatna ustawiająca dostępność menu w zależności od zalogowanej osoby
	 * @param person
	 */
	private void setPerson(String person) {
		if (person.equals("Klient")) {
			menuSklep.setEnabled(true);
			menuZarza.setEnabled(false);
			menuAbout.setEnabled(true);
			sklepZaloguj.setEnabled(false);
			sklepWyloguj.setEnabled(true);
		} else if (person.equals("Kierownik")) {
			menuSklep.setEnabled(true);
			menuZarza.setEnabled(true);
			menuAbout.setEnabled(true);
			sklepZaloguj.setEnabled(false);
			sklepWyloguj.setEnabled(true);
		} else if (person.equals("Sprzedawca")) {
			menuSklep.setEnabled(true);
			menuZarza.setEnabled(true);
			menuAbout.setEnabled(true);
			sklepZaloguj.setEnabled(false);
			sklepWyloguj.setEnabled(true);
		} else if (person.equals("Logowanie")) {
			menuSklep.setEnabled(true);
			menuZarza.setEnabled(false);
			menuAbout.setEnabled(true);
			sklepZaloguj.setEnabled(false);
			sklepWyloguj.setEnabled(false);
		} else {
			menuSklep.setEnabled(true);
			menuZarza.setEnabled(false);
			menuAbout.setEnabled(true);
			sklepZaloguj.setEnabled(true);
			sklepWyloguj.setEnabled(false);
		}
	}

	/**
	 * Metoda prywatna sprawdzająca obecność tekstu w wymaganych polach formularza "dodawaj produktu"
	 * @return boolean
	 */
	private boolean sprawdzDodajProdukt() {
		if (0 == jtfGatunek.getText().length())
			return false;
		else if (0 == jtfIlosc.getText().length())
			return false;
		else if (0 == jtfCena.getText().length())
			return false;
		else
			return true;
	}

	/**
	 * Prywatna metoda zamykajaca aplikację™
	 */
	private void closeWindow() {
		// utworzenie okna z potwierdzeniem zamkniecia
		int value = JOptionPane.showOptionDialog(this,
				"Czy chcesz zamknąć program? Wybranie przycisku Tak spowoduje "
						+ "jego zamknięcie.", // komunikat
				"Pytanie",// nagĹ‚Ăłwek okna
				JOptionPane.YES_NO_OPTION, // typ opcji
				JOptionPane.QUESTION_MESSAGE, // typ komunikatu
				null, // domyślna ikona
				optionJOptionPane, // zestaw etykiet przycisków
				optionJOptionPane[0]); // inicjacja aktywnego przycisku

		if (value == JOptionPane.YES_OPTION) {
			// Zamkniecie aplikacji
			dispose();
			System.exit(0);
		}
	}

	/**
	 * Publiczna metoda z interfejsu <code>ActionListener</code>
	 * obslugujaca zdarzenie akcji <code>ActionEvent</code>
	 */
	public void actionPerformed(ActionEvent e) {
		Object source = e.getSource();
		// //LOGOWANIE
		if (source == jbLog) {
			String email = jtfEmail.getText();
			String hasl = jtfHaslo.getText();

			if (email.length() > 0 && hasl.length() > 0) {
				System.out.println(email + ", " + hasl);
				if (log.czySprawdzHaslo(email, hasl)) {
					this.setTitle(log.getTyp() + ": " + log.getImie() + " "
							+ log.getNazwisko());
					jpMain.removeAll();
					setPerson(log.getTyp());
					jpMain.add(powitanie());
					jpMain.repaint();
				} else {
					JOptionPane
							.showMessageDialog(
									frame,
									"Nie ma takiego konta albo dane są źle wypełnione.",
									"Logowanie", JOptionPane.ERROR_MESSAGE);
				}
			} else {
				JOptionPane.showMessageDialog(frame, "Uzupełni pola.",
						"Logowanie", JOptionPane.ERROR_MESSAGE);
			}
		}
	
		// //WYLOGUJ || ZALOGUJ
		else if (source == sklepWyloguj || source == sklepZaloguj) {
			jpMain.removeAll();
			jpMain.add(logowanie());
			jpMain.repaint();
		}

		// //ZAMKNI
		else if (source == sklepWyjdz) {
			closeWindow();
		}
		// //LISTA PŁYT
		else if (source == sklepListaPlyt) {
			if (log.getTyp() == "Klient") {
				sklep = Sklep.zmienInstancje("", true);
				sklep.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
				sklep.setLocationRelativeTo(null);
				sklep.setModal(true);
				sklep.setVisible(true);
			} else {
				sklep = Sklep.zmienInstancje("", false);
				sklep.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
				sklep.setLocationRelativeTo(null);
				sklep.setModal(true);
				sklep.setVisible(true);
			}
		}
		// //DODAJ PRODUKT PANEL
		else if (source == zarzDodajProd) {
			jpMain.removeAll();
			jpMain.add(dodajProdukt());
			jpMain.repaint();
		}
		// /DODAJ PRODUKT
		else if (source == jbDodajP) {
			if (sprawdzDodajProdukt()) {
				// //Dodanie towaru
				zap.dodaj("INSERT INTO towar(gatunek_muzyki, nazwa_albumu, rok_wydania, ilosc_magazyn, cena_magazyn)"
						+ " VALUES ('"
						+ jtfGatunek.getText()
						+ "','"
						+ jtfTytul.getText()
						+ "','"
						+ jtfRok.getText()
						+ "','"
						+ jtfIlosc.getText()
						+ "','"
						+ jtfCena.getText()
						+ "');");
				int id_tow = zap.getID(
						"SELECT id_towaru FROM towar WHERE nazwa_albumu = '"
								+ jtfTytul.getText() + "'"
								+ " AND ilosc_magazyn= " + jtfIlosc.getText()
								+ " AND cena_magazyn= " + jtfCena.getText()
								+ ";", "id_towaru");

				// //uzupełnienie muzykow i towar_muzycy
				try {
					int id_muz = 0;
					int i = 0;
					int id_muzIS = zap.getID(
							"SELECT id_muzyka FROM muzycy WHERE nazwa_zespolu= '"
									+ jtfZespol.getText() + "';", "id_muzyka");

					if (id_muzIS > 0) {
						zap.dodaj("INSERT INTO towar_muzycy(id_towaru, id_muzyka) VALUES ("
								+ id_tow + ", " + id_muzIS + ");");
					} else {
						for (i = 0; 0 != imie[i].getText().length()
								|| 0 != nazwisko[i].getText().length()
								|| 0 != pseudonim[i].getText().length()
								&& i < 4; i++) {
							zap.dodaj("INSERT INTO muzycy(imie, nazwisko, pseudonim, nazwa_zespolu)"
									+ " VALUES ('"
									+ imie[i].getText()
									+ "', '"
									+ nazwisko[i].getText()
									+ "', '"
									+ pseudonim[i].getText()
									+ "', '"
									+ jtfZespol.getText() + "')");

							id_muz = zap.getID(
									"SELECT id_muzyka FROM muzycy WHERE imie = '"
											+ imie[i].getText() + "'"
											+ " AND nazwisko= '"
											+ nazwisko[i].getText() + "'"
											+ " AND pseudonim= '"
											+ pseudonim[i].getText() + "'"
											+ " AND nazwa_zespolu= '"
											+ jtfZespol.getText() + "';",
									"id_muzyka");

							zap.dodaj("INSERT INTO towar_muzycy(id_towaru, id_muzyka) VALUES ("
									+ id_tow + ", " + id_muz + ");");
						}
					}
					if (i == 0 && id_muzIS < 1) {
						zap.dodaj("INSERT INTO muzycy(nazwa_zespolu)"
								+ " VALUES ('" + jtfZespol.getText() + "')");
						int id_muz2 = zap.getID(
								"SELECT id_muzyka FROM muzycy WHERE nazwa_zespolu= '"
										+ jtfZespol.getText() + "';",
								"id_muzyka");
						zap.dodaj("INSERT INTO towar_muzycy(id_towaru, id_muzyka) VALUES ("
								+ id_tow + ", " + id_muz2 + ");");
					}
					// //uzupełnienie utworów i towar_utwory
					int id_ut = 0;
					for (int j = 0; 0 != nazwa[j].getText().length() && j < 30; j++) {
						zap.dodaj("INSERT INTO utwory(tytul, czas_trwania) VALUES ('"
								+ nazwa[j].getText()
								+ "', '"
								+ czas[j].getText() + "');");

						id_ut = zap
								.getID("SELECT id_utworu FROM utwory WHERE tytul = '"
										+ nazwa[j].getText()
										+ "' AND czas_trwania= '"
										+ czas[j].getText() + "';", "id_utworu");

						zap.dodaj("INSERT INTO towar_utwory(id_towaru, id_utworu) VALUES ("
								+ id_tow + "," + id_ut + ");");

						JOptionPane.showMessageDialog(frame, "Dodano produkt.",
								"Dodaj produkt",
								JOptionPane.INFORMATION_MESSAGE);
					}
				} catch (Exception a) {
					JOptionPane.showMessageDialog(frame,
							"Błąd przy dodawaniu produktu.", "Dodaj produkt",
							JOptionPane.ERROR_MESSAGE);
				}
			} else {
				JOptionPane.showMessageDialog(frame,
						"Wymagane pole jest puste.", "Dodaj produkt",
						JOptionPane.ERROR_MESSAGE);
			}
		}
		// //KONCZACE SIE
		else if (source == zarzKonczaceSie) {
			jpMain.removeAll();
			jpMain.add(konczace());
			jpMain.repaint();
		}
		// KONCZACE POKAZ
		else if (source == jbKonPokaz) {
			String ilosc = jtfKonczace.getText();
			if (ilosc.length() > 0) {
				kon = Konczace.zmienInstancje(ilosc);
				kon.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
				kon.setLocationRelativeTo(null);
				kon.setModal(true);
				kon.setVisible(true);
			} else {
				JOptionPane.showMessageDialog(frame, "Wpisz wymaganą ilość.",
						"Kończące się produkty", JOptionPane.ERROR_MESSAGE);
			}
		}
		// ZAMOWIENIA
		else if (source == zarzZamowienia) {
			zamow = new Zamowienia("WHERE data_wysylki IS NULL");
			zamow.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			zamow.setLocationRelativeTo(null);
			zamow.setModal(true);
			zamow.setVisible(true);
		}
		// oAplkikacji
		else if (source == oAplkikacji) {
			ab = new AboutWindow();
			ab.setVisible(true);
		} else if (source == zarzStatystyki) {
			jpMain.removeAll();
			jpMain.add(statystyki());
			jpMain.repaint();
		}
	}
	/*
	void list_mouseCliced(MouseEvent e) {
		Towar tow = (Towar) list.getSelectedValue();
		jlNazwaW.setText(tow.getNazwaAlbumu());
		jlRokW.setText(tow.getRokWyd());
		jlGatunekW.setText(tow.getGatunek());
		jlIloscW.setText("" + tow.getIloscMag());
		jlCenaW.setText("" + tow.getIloscMag());
	}
	*/
	public static void main(String[] args) {
		Main m = new Main();
		m.setVisible(true);
	}
}
